package com.xiehua.task.encrypt.rsa;

import java.util.Base64;
import java.util.Map;

public class RSATester {
    static String publicKey;
    static String privateKey;
    static {
        try {
            Map<String, Object> keyMap = RSAUtils.genKeyPair();
            publicKey = RSAUtils.getPublicKey(keyMap);
            privateKey = RSAUtils.getPrivateKey(keyMap);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
     
    public static void main(String[] args) throws Exception {
        sign();
    }
 
    static void demo() throws Exception {
    	System.err.println("=========================RSA测试===============================");
    	String source = "1";
    	System.out.println("\r加密前文字：\r\n" + source);
        System.out.println("公钥    "+publicKey);
        System.out.println("私钥    "+privateKey);
    	byte[] data = source.getBytes();
        byte[] encodedData = RSAUtils.encryptByPublicKey(data, publicKey);
        String dataCrypted=Base64.getEncoder().encodeToString(encodedData);
        System.out.println("加密后:"+dataCrypted);
        byte[] e=RSAUtils.decryptByPrivateKey(encodedData, privateKey);
        System.out.println("解密后:"+new String(e));
    }
    
    public static void demo2() throws Exception{
    	String source = "{\"id_card\":\"2114811984011*****\",\"user_mobile\":\"1862310****\"}";
    	System.out.println("\r加密前文字：\r\n" + source);
    	String pub="MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCoR2ZyehedEXfLF8lrbcreceHNaiQ8U0UavADErZjyBqFekkx0h3dr0nE20yCAGB/rOCEhFPK4QHdmLzD480JxQyXErLDsx3KYD4ACDM+APZetUlzhOyUyeqN6Z8Ivys+SuoQ60a3aygb78SggyYhVve+rWb4PoukG41cdipNVNQIDAQAB";
    	String pri="MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAKhHZnJ6F50Rd8sXyWttyt5x4c1qJDxTRRq8AMStmPIGoV6STHSHd2vScTbTIIAYH+s4ISEU8rhAd2YvMPjzQnFDJcSssOzHcpgPgAIMz4A9l61SXOE7JTJ6o3pnwi/Kz5K6hDrRrdrKBvvxKCDJiFW976tZvg+i6QbjVx2Kk1U1AgMBAAECgYBsPGiHj0Iq87ZSef1CzP6kbylmfzPJXWHgXTY9Ss9KNLuMYZsthIhqYJQTSF7qJRo6qAKfDaNEoapqnkXoikacGTBSaV/GQERtoTrCRDdKhtCyMhZ9/HlXaEOaXfl6BjCTbD2uz3OGr0PVAyF+anHesDBPVLIVqHv78pu46FXowQJBAOIwkW2O3pke1AMW2ZbWeZa7XFZyVhnN12bdI/yPH+EgAZm+whVmhoosxhyzH7Uf0viLQS0YADDN515cwsgIJMUCQQC+dPmQ5nr8lAUeLzYhrjy1O/xt7C7J6rC0WQxMh/uHBLI0C/rsi7MLwpiobhJMIJkn/UDwG/3zorDNj0tmktWxAkEAlUfCo1D4foxHFqbdAl0YsC+FuJQLWUpuEDiBCK2ZN6Y9CDBKvX8F6mm0crqRgaO4REr7v/woHA241qFX+FbPlQJAe9KxLnOqIexaJ3WqS9trvKhzRUP4Z24d1CLQzDDcZru23/+p84Aft9WcSmTFoJjQ+h68yV5pjKyJJhuzecydAQJAHWsrp4Nnqvb8kP97054Act0addH13myTlzxGUx3t7pqVbyliKt6Xv6d+0rEWmAZu8nIjUNFDV92QPbCFk42EAg==";
    	byte[] data = source.getBytes();
        byte[] encodedData = RSAUtils.encryptByPublicKey(data, pub);
        String dataCrypted= Base64.getEncoder().encodeToString(encodedData);
        System.out.println("加密后:"+dataCrypted);
        byte[] e=RSAUtils.decryptByPrivateKey(Base64.getDecoder().decode(dataCrypted), pri);
        System.out.println("解密后:"+new String(e));
    }

    public static void sign() throws Exception{
        String source = "阻止中国技术进步，那是徒劳(望海楼)\n" +
                "\n" +
                "- 王义桅\n" +
                "\n" +
                "近期，美国宣布对进口钢铁和铝产品征收高关税，并公布对华301调查结果，威胁要对“中国制造2025”中涉及的许多行业征收高额进口税，这让世界陷入贸易战的紧张气氛中。\n" +
                "\n" +
                "原来，美国在意的不仅是对华贸易逆差，还有中国技术进步的势头。前不久，就有美国前政要发表演讲，声称中国对美国的核心技术发起全方位挑战，并将矛头直指“中国制造2025”、5G等领域。\n" +
                "\n" +
                "美国确实感受到来自于“中国制造2025”的挑战。美国一些人认为中国偷了美国的技术，并不是靠自己的力量发展起来的。因而，美国欲通过提高关税阻碍中国核心技术进步的步伐，从而维持核心技术的垄断权。尽管中国政府一再强调，“中国制造2025”是开放的，对内外资企业一视同仁，欢迎美国参与，但美国要的是技术霸权、规则霸权，所以不能容忍中国的“挑战”。\n" +
                "\n" +
                "特朗普签署行政备忘录前，美国贸易代表莱特希泽在演讲中指出，301调查主要针对科技领域。科技领域是各国未来集中竞争的领域，这个领域的核心技术和话语权、标准将涉及到未来整个产业的竞争，甚至涉及新的国际标准的制定。中美之间在科技领域的竞争包括本国市场、核心技术和未来国际规则三个部分。\n" +
                "\n" +
                "近年来，中国大力提升芯片和人工智能等关键领域的自主研发能力，这是此次美国发起对华贸易战的背景。中国的数字经济规模超过美国，在人工智能领域仅次于美国。美国要保持垄断地位、确保新一轮新兴产业的规则制定权，所以现在就以知识产权保护为由不让中国进入美国市场。美国担心的不光是产品的问题，还有系统的问题，事关工业4.0的主导权。\n" +
                "\n" +
                "美国以所谓对美国国家安全的威胁为由，从意识形态角度出发限制中国对美的出口，其实是担心中国在新兴产业上发起对美国的挑战。因为一旦芯片的垄断被中国打破，中国不仅会减少对美国芯片的进口，未来还有可能出口，挤压美国市场。这些担心都使得美国现在对中国的芯片看得很死。\n" +
                "\n" +
                "企图通过贸易战破坏“中国制造2025”势头，阻止中国技术进步，这是特朗普的如意算盘。特朗普此举也是服务于今年美国国内的中期选举。\n" +
                "\n" +
                "然而，特朗普的如意算盘，将牺牲美国消费者利益，也必遭中国反击，可谓害人害己，最终也根本无法阻止中国技术进步，只会让世人再次看清美国自私自利的本质。美国做法影响极其恶劣，不仅破坏国际贸易秩序，更破坏了后发国家追赶西方发达国家的步伐。\n" +
                "\n" +
                "动辄把自身的问题归咎于对方、在战略判断上犯下根本性错误，只会损人害己、搞乱世界。这种做法不得人心。\n" +
                "\n" +
                "(作者为中国人民大学重阳金融研究院高级研究员、中国国际贸易促进会专家委员会委员)返回搜狐，查看更多阻止中国技术进步，那是徒劳(望海楼)\n" +
                "\n" +
                "- 王义桅\n" +
                "\n" +
                "近期，美国宣布对进口钢铁和铝产品征收高关税，并公布对华301调查结果，威胁要对“中国制造2025”中涉及的许多行业征收高额进口税，这让世界陷入贸易战的紧张气氛中。\n" +
                "\n" +
                "原来，美国在意的不仅是对华贸易逆差，还有中国技术进步的势头。前不久，就有美国前政要发表演讲，声称中国对美国的核心技术发起全方位挑战，并将矛头直指“中国制造2025”、5G等领域。\n" +
                "\n" +
                "美国确实感受到来自于“中国制造2025”的挑战。美国一些人认为中国偷了美国的技术，并不是靠自己的力量发展起来的。因而，美国欲通过提高关税阻碍中国核心技术进步的步伐，从而维持核心技术的垄断权。尽管中国政府一再强调，“中国制造2025”是开放的，对内外资企业一视同仁，欢迎美国参与，但美国要的是技术霸权、规则霸权，所以不能容忍中国的“挑战”。\n" +
                "\n" +
                "特朗普签署行政备忘录前，美国贸易代表莱特希泽在演讲中指出，301调查主要针对科技领域。科技领域是各国未来集中竞争的领域，这个领域的核心技术和话语权、标准将涉及到未来整个产业的竞争，甚至涉及新的国际标准的制定。中美之间在科技领域的竞争包括本国市场、核心技术和未来国际规则三个部分。\n" +
                "\n" +
                "近年来，中国大力提升芯片和人工智能等关键领域的自主研发能力，这是此次美国发起对华贸易战的背景。中国的数字经济规模超过美国，在人工智能领域仅次于美国。美国要保持垄断地位、确保新一轮新兴产业的规则制定权，所以现在就以知识产权保护为由不让中国进入美国市场。美国担心的不光是产品的问题，还有系统的问题，事关工业4.0的主导权。\n" +
                "\n" +
                "美国以所谓对美国国家安全的威胁为由，从意识形态角度出发限制中国对美的出口，其实是担心中国在新兴产业上发起对美国的挑战。因为一旦芯片的垄断被中国打破，中国不仅会减少对美国芯片的进口，未来还有可能出口，挤压美国市场。这些担心都使得美国现在对中国的芯片看得很死。\n" +
                "\n" +
                "企图通过贸易战破坏“中国制造2025”势头，阻止中国技术进步，这是特朗普的如意算盘。特朗普此举也是服务于今年美国国内的中期选举。\n" +
                "\n" +
                "然而，特朗普的如意算盘，将牺牲美国消费者利益，也必遭中国反击，可谓害人害己，最终也根本无法阻止中国技术进步，只会让世人再次看清美国自私自利的本质。美国做法影响极其恶劣，不仅破坏国际贸易秩序，更破坏了后发国家追赶西方发达国家的步伐。\n" +
                "\n" +
                "动辄把自身的问题归咎于对方、在战略判断上犯下根本性错误，只会损人害己、搞乱世界。这种做法不得人心。\n" +
                "\n" +
                "(作者为中国人民大学重阳金融研究院高级研究员、中国国际贸易促进会专家委员会委员)返回搜狐，查看更多";
        System.out.println(source.getBytes().length);
        System.out.println("国".getBytes().length);
        //System.out.println("\r加密前文字：\r\n" + source);
        System.out.println("公钥    "+publicKey);
        System.out.println("私钥    "+privateKey);
//        byte b = -128 127 ;
//        System.out.println(b);
        byte[] data = source.getBytes();
        String hased = RSAUtils.sign(data,privateKey);
        boolean flg = RSAUtils.verify(data,publicKey,hased);
        System.out.println(flg);

    }

}